package co.gov.medellin.ssti.sub.model.dao.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.cs.beneficios.business.model.AreaVO;
import com.cs.beneficios.business.model.ProgramaVO;

import co.gov.medellin.ssti.sub.common.ConexionFactory;
import co.gov.medellin.ssti.sub.common.excepcion.SUBException;
import co.gov.medellin.ssti.sub.model.dao.IProgramaDAO;

public class ProgramaDAOImpl extends BaseDAOImpl implements IProgramaDAO {

	// **************************************
	// QUERYS
	// **************************************

	private static final String SELECT_TODOS_PROGRAMAS_VIGENTES = "SELECT P.CODIGO CODIGO, "
			+ "P.AREA_CODIGO AREA, P.NOMBRE NOMBRE, P.DESCRIPCION DESCRIPCION, "
			+ "P.USU_CODIGO USU_CODIGO, P.VIGENCIA VIGENCIA FROM TCS_BEN_PROGRAMA P "
			+ "WHERE P.VIGENCIA = 'A' ORDER BY NOMBRE ";

	private static final String SELECT_TODOS_PROGRAMAS_BY_AREA = "SELECT P.CODIGO CODIGO, "
			+ "P.AREA_CODIGO AREA, P.NOMBRE NOMBRE, P.DESCRIPCION DESCRIPCION, "
			+ "P.USU_CODIGO USU_CODIGO, P.VIGENCIA VIGENCIA FROM TCS_BEN_PROGRAMA P "
			+ "WHERE P.VIGENCIA = 'A' AND P.AREA_CODIGO = ? ORDER BY NOMBRE ";

	public List loadAllProgramas() {
		Connection con = null;
		PreparedStatement pstmt = null;
		ResultSet rst = null;

		List programas = new ArrayList();

		try {
			con = ConexionFactory.getInstance().getConnection();
			pstmt = con.prepareStatement(SELECT_TODOS_PROGRAMAS_VIGENTES);
			rst = pstmt.executeQuery();
			while (rst.next()) {
				ProgramaVO programa = new ProgramaVO();
				programa.setCode(new Long(rst.getLong("CODIGO")));
				programa.setNombre(rst.getString("NOMBRE"));
				programas.add(programa);
			}
		} catch (SQLException e) {
			SUBException
					.logDebugError(
							"Error inesperado obteniendo la lista de todas los programas.",
							e);
		} finally {
			close(con, pstmt, rst);
		}
		return programas;
	}

	public List loadAllProgramasByArea(String secretaryCode) {
		Connection con = null;
		PreparedStatement pstmt = null;
		ResultSet rst = null;

		List programas = new ArrayList();

		try {
			con = ConexionFactory.getInstance().getConnection();
			pstmt = con.prepareStatement(SELECT_TODOS_PROGRAMAS_BY_AREA);
			pstmt.setString(1, secretaryCode);
			rst = pstmt.executeQuery();
			while (rst.next()) {
				ProgramaVO programa = new ProgramaVO();
				programa.setCode(new Long(rst.getLong("CODIGO")));
				programa.setNombre(rst.getString("NOMBRE"));
				programas.add(programa);
			}
		} catch (SQLException e) {
			SUBException
					.logDebugError(
							"Error inesperado obteniendo la lista de todas los programas por area.",
							e);
		} finally {
			close(con, pstmt, rst);
		}
		return programas;
	}

}
